From 8c403c43f0b8770c7a6fcc4eb98d272774b83bbf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Tue, 3 Jul 2018 22:30:25 +0200 Subject: [PATCH] spinbutton: Keep GParamSpecs around notify_by_pspec is more efficient and this way the source file is more in line with the others. --- gtk/gtkspinbutton.c | 208 +++++++++++++++++++++----------------------- 1 file changed, 101 insertions(+), 107 deletions(-) diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index 80f3f3379e..9a112ebf7d 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -34,7 +34,9 @@ #include "gtkbox.h" #include "gtkbutton.h" #include "gtkcssstylepropertyprivate.h" -#include "gtkentryprivate.h" +#include "gtkeditable.h" +#include "gtkentry.h" +#include "gtkeventcontrollerkey.h" #include "gtkeventcontrollermotion.h" #include "gtkeventcontrollerscroll.h" #include "gtkgesturemultipress.h" @@ -222,6 +224,7 @@ enum { PROP_WIDTH_CHARS, PROP_MAX_WIDTH_CHARS, PROP_TEXT, + NUM_SPINBUTTON_PROPS, PROP_ORIENTATION, }; @@ -289,6 +292,7 @@ static void gtk_spin_button_default_output (GtkSpinButton *spin_button); static guint spinbutton_signals[LAST_SIGNAL] = {0}; +static GParamSpec *spinbutton_props[NUM_SPINBUTTON_PROPS] = {NULL, }; G_DEFINE_TYPE_WITH_CODE (GtkSpinButton, gtk_spin_button, GTK_TYPE_WIDGET, G_ADD_PRIVATE (GtkSpinButton) @@ -323,97 +327,87 @@ gtk_spin_button_class_init (GtkSpinButtonClass *class) class->output = NULL; class->change_value = gtk_spin_button_real_change_value; - g_object_class_install_property (gobject_class, - PROP_ADJUSTMENT, - g_param_spec_object ("adjustment", - P_("Adjustment"), - P_("The adjustment that holds the value of the spin button"), - GTK_TYPE_ADJUSTMENT, - GTK_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_CLIMB_RATE, - g_param_spec_double ("climb-rate", - P_("Climb Rate"), - P_("The acceleration rate when you hold down a button or key"), - 0.0, G_MAXDOUBLE, 0.0, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_DIGITS, - g_param_spec_uint ("digits", - P_("Digits"), - P_("The number of decimal places to display"), - 0, MAX_DIGITS, 0, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_SNAP_TO_TICKS, - g_param_spec_boolean ("snap-to-ticks", - P_("Snap to Ticks"), - P_("Whether erroneous values are automatically changed to a spin button’s nearest step increment"), - FALSE, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_NUMERIC, - g_param_spec_boolean ("numeric", - P_("Numeric"), - P_("Whether non-numeric characters should be ignored"), - FALSE, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_WRAP, - g_param_spec_boolean ("wrap", - P_("Wrap"), - P_("Whether a spin button should wrap upon reaching its limits"), - FALSE, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_UPDATE_POLICY, - g_param_spec_enum ("update-policy", - P_("Update Policy"), - P_("Whether the spin button should update always, or only when the value is legal"), - GTK_TYPE_SPIN_BUTTON_UPDATE_POLICY, - GTK_UPDATE_ALWAYS, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_VALUE, - g_param_spec_double ("value", - P_("Value"), - P_("Reads the current value, or sets a new value"), - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_WIDTH_CHARS, - g_param_spec_int ("width-chars", - P_("Width in chars"), - P_("Number of characters to leave space for in the entry"), - -1, G_MAXINT, - 0, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_MAX_WIDTH_CHARS, - g_param_spec_int ("max-width-chars", - P_("Maximum width in characters"), - P_("The desired maximum width of the entry, in characters"), - -1, G_MAXINT, - 0, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - - g_object_class_install_property (gobject_class, - PROP_TEXT, - g_param_spec_string ("text", - P_("Text"), - P_("The contents of the entry"), - "0", /* Default value of the default adjustment */ - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - + spinbutton_props[PROP_ADJUSTMENT] = + g_param_spec_object ("adjustment", + P_("Adjustment"), + P_("The adjustment that holds the value of the spin button"), + GTK_TYPE_ADJUSTMENT, + GTK_PARAM_READWRITE); + + spinbutton_props[PROP_CLIMB_RATE] = + g_param_spec_double ("climb-rate", + P_("Climb Rate"), + P_("The acceleration rate when you hold down a button or key"), + 0.0, G_MAXDOUBLE, 0.0, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_DIGITS] = + g_param_spec_uint ("digits", + P_("Digits"), + P_("The number of decimal places to display"), + 0, MAX_DIGITS, 0, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_SNAP_TO_TICKS] = + g_param_spec_boolean ("snap-to-ticks", + P_("Snap to Ticks"), + P_("Whether erroneous values are automatically changed to a spin button’s nearest step increment"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_NUMERIC] = + g_param_spec_boolean ("numeric", + P_("Numeric"), + P_("Whether non-numeric characters should be ignored"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_WRAP] = + g_param_spec_boolean ("wrap", + P_("Wrap"), + P_("Whether a spin button should wrap upon reaching its limits"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_UPDATE_POLICY] = + g_param_spec_enum ("update-policy", + P_("Update Policy"), + P_("Whether the spin button should update always, or only when the value is legal"), + GTK_TYPE_SPIN_BUTTON_UPDATE_POLICY, + GTK_UPDATE_ALWAYS, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_VALUE] = + g_param_spec_double ("value", + P_("Value"), + P_("Reads the current value, or sets a new value"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_WIDTH_CHARS] = + g_param_spec_int ("width-chars", + P_("Width in chars"), + P_("Number of characters to leave space for in the entry"), + -1, G_MAXINT, + 0, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_MAX_WIDTH_CHARS] = + g_param_spec_int ("max-width-chars", + P_("Maximum width in characters"), + P_("The desired maximum width of the entry, in characters"), + -1, G_MAXINT, + 0, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + spinbutton_props[PROP_TEXT] = + g_param_spec_string ("text", + P_("Text"), + P_("The contents of the entry"), + "0", /* Default value of the default adjustment */ + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + + g_object_class_install_properties (gobject_class, NUM_SPINBUTTON_PROPS, spinbutton_props); g_object_class_override_property (gobject_class, PROP_ORIENTATION, "orientation"); @@ -1195,7 +1189,7 @@ gtk_spin_button_value_changed (GtkAdjustment *adjustment, update_buttons_sensitivity (spin_button); gtk_widget_queue_draw (GTK_WIDGET (spin_button)); - g_object_notify (G_OBJECT (spin_button), "value"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_VALUE]); } static void @@ -1564,20 +1558,20 @@ gtk_spin_button_configure (GtkSpinButton *spin_button, spin_button); priv->timer_step = gtk_adjustment_get_step_increment (priv->adjustment); - g_object_notify (G_OBJECT (spin_button), "adjustment"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_ADJUSTMENT]); gtk_widget_queue_resize (GTK_WIDGET (spin_button)); } if (priv->digits != digits) { priv->digits = digits; - g_object_notify (G_OBJECT (spin_button), "digits"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_DIGITS]); } if (priv->climb_rate != climb_rate) { priv->climb_rate = climb_rate; - g_object_notify (G_OBJECT (spin_button), "climb-rate"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_CLIMB_RATE]); } g_object_thaw_notify (G_OBJECT (spin_button)); @@ -1725,7 +1719,7 @@ gtk_spin_button_set_digits (GtkSpinButton *spin_button, { priv->digits = digits; gtk_spin_button_value_changed (priv->adjustment, spin_button); - g_object_notify (G_OBJECT (spin_button), "digits"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_DIGITS]); /* since lower/upper may have changed */ gtk_widget_queue_resize (GTK_WIDGET (spin_button)); @@ -1944,7 +1938,7 @@ gtk_spin_button_set_update_policy (GtkSpinButton *spin_button, if (priv->update_policy != policy) { priv->update_policy = policy; - g_object_notify (G_OBJECT (spin_button), "update-policy"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_UPDATE_POLICY]); } } @@ -1987,8 +1981,8 @@ gtk_spin_button_set_numeric (GtkSpinButton *spin_button, if (priv->numeric != numeric) { - priv->numeric = numeric; - g_object_notify (G_OBJECT (spin_button), "numeric"); + priv->numeric = numeric; + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_NUMERIC]); } } @@ -2032,10 +2026,10 @@ gtk_spin_button_set_wrap (GtkSpinButton *spin_button, if (priv->wrap != wrap) { - priv->wrap = wrap; - g_object_notify (G_OBJECT (spin_button), "wrap"); + priv->wrap = wrap; + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_WRAP]); - update_buttons_sensitivity (spin_button); + update_buttons_sensitivity (spin_button); } } @@ -2085,7 +2079,7 @@ gtk_spin_button_set_snap_to_ticks (GtkSpinButton *spin_button, if (new_val && gtk_editable_get_editable (GTK_EDITABLE (priv->entry))) gtk_spin_button_update (spin_button); - g_object_notify (G_OBJECT (spin_button), "snap-to-ticks"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_SNAP_TO_TICKS]); } } @@ -2271,7 +2265,7 @@ gtk_spin_button_set_text (GtkSpinButton *spin_button, gtk_entry_set_text (GTK_ENTRY (priv->entry), text); - g_object_notify (G_OBJECT (spin_button), "text"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_TEXT]); } /** @@ -2316,7 +2310,7 @@ gtk_spin_button_set_max_width_chars (GtkSpinButton *spin_button, if (max_width_chars != gtk_entry_get_max_width_chars (GTK_ENTRY (priv->entry))) { gtk_entry_set_max_width_chars (GTK_ENTRY (priv->entry), max_width_chars); - g_object_notify (G_OBJECT (spin_button), "max-width-chars"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_MAX_WIDTH_CHARS]); } } @@ -2359,6 +2353,6 @@ gtk_spin_button_set_width_chars (GtkSpinButton *spin_button, if (width_chars != gtk_entry_get_width_chars (GTK_ENTRY (priv->entry))) { gtk_entry_set_width_chars (GTK_ENTRY (priv->entry), width_chars); - g_object_notify (G_OBJECT (spin_button), "width-chars"); + g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_WIDTH_CHARS]); } } -- 2.30.2